import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'
import router from './router'
import { TUser } from '@/types';

import store from './vuex'

// 请求拦截
axios.interceptors.request.use((config:AxiosRequestConfig):AxiosRequestConfig=>{
    // 抓取token （从状态管理中抓）
    let user:TUser = window.localStorage.getItem('user'); // 约定user类型
    user = user ? JSON.parse(user) : '';
    // 携带到请求头
    config.headers = {token: user!.token}
    // 显示loading
    store.commit('UPDATE_LOADING', true)

    return config; // 必须要有返回值
}, function(error){
    return Promise.reject(error)
})
// 响应拦截
axios.interceptors.response.use((response:AxiosResponse<any>):AxiosResponse<any>=>{
    // token过期，跳转login，保留当前地址
    if(response.data.error === 2 && !router.currentRoute.fullPath.includes('./login')){
        router.push({
            path: './login',
            query: {
                path: router.currentRoute.fullPath
            }
        })
    }
    // 关闭loading
    store.commit('UPDATE_LOADING', false)
    return response;
}, function(error){
    return Promise.reject(error)
})
// 对外暴露
window.axios = axios; // 需要定义declare global
export default axios